291991db9b7edfebdba04a61c9f6208c8790b23f,plugins/migration/source/jetbrains/mps/migration20/stages/StubConversionStage.java,StubConversionStage,reResolveStubRefs,#MPSProject#,117
Before Change
boolean reloadNeeded = false;
Map<String, SModelReference> globalCache = new HashMap<String, SModelReference>();
for (IModule module : p.getModules()) {
Map<String, SModelReference> moduleCache = new HashMap<String, SModelReference>();
for (SModelDescriptor d : module.getOwnModelDescriptors()) {
if (!(d instanceof EditableSModelDescriptor)) continue;
if (!(SModelStereotype.isUserModel(d))) continue;
Set<SModelReference> toRemove = new HashSet<SModelReference>();
for (SNode node : d.getSModel().nodes()) {
for (SReference ref : node.getReferences()) {
SModelReference targetModel = ref.getTargetSModelReference();
if (targetModel == null) continue;
SModelId modelId = targetModel.getSModelId();
After Change
if (d == null) continue;
IModule module = d.getModule();
if (module == null) continue;
Set<SModelReference> toRemove = new HashSet<SModelReference>();
for (SNode node : d.getSModel().nodes()) {
for (SReference ref : node.getReferences()) {
SModelId modelId = ref.getTargetSModelReference().getSModelId();
SNodeId nodeId = ref.getTargetNodeId();
if (modelId instanceof SModelId.RegularSModelId) continue;
if (ref.getTargetNode() != null) continue;
String oldId = ((SModelId.ForeignSModelId) modelId).getId();
SModelReference replacement = null;
SModelReference cachedReplacement = cache.get(oldId);
if (cachedReplacement != null && module.getScope().getModelDescriptor(cachedReplacement) != null) {
replacement = cachedReplacement;
} else {
for (SModelDescriptor md : module.getScope().getModelDescriptors()) {
SModelReference mdRef = md.getSModelReference();
SModelId mdId = mdRef.getSModelId();
if (mdId instanceof SModelId.RegularSModelId) continue;
if (!(matches(oldId, ((SModelId.ForeignSModelId) mdId).getId()))) continue;
if (md.getSModel().getNodeById(nodeId) == null) continue;
replacement = md.getSModelReference();
cache.put(oldId, replacement);
break;
}
}
if (replacement != null) {
toRemove.add(ref.getTargetSModelReference());
SModelReference mr = replacement;
d.getSModel().addModelImport(mr, false);
ref.setTargetSModelReference(mr);